package com.hopu.aop.proxy.jdkproxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * JDK的动态代理
 */
public class MyJDKProxyShop implements InvocationHandler {

    //被代理者对象
    private Object factory;

    //设置被代理者对象,并创建代理者对象
    public Object createProxy(Object factory) {
        this.factory = factory;
        //创建代理对象
        Object p = Proxy.newProxyInstance(factory.getClass().getClassLoader(),
                                        factory.getClass().getInterfaces(),
                                    this);
        return p;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        //功能扩展
        System.out.println("给产品打广告------------");
        //调用被代理者的方法 factory是调方法的对象，args是方法的参数
        method.invoke(factory,args);
        System.out.println("给产品做售后------------");
        return null;
    }
}
